<%@ page language="java" pageEncoding="UTF-8" %>
<%@page import="java.io.*,java.util.*" %>

<%@page import="org.apache.commons.fileupload.*" %>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>上传处理页面</title>
</head>
<body>
<%

    request.setCharacterEncoding("utf-8");
    String uploadFileName = "123.png"; //上传的文件名
    String fieldName = "";  //表单字段元素的name属性值
    //上传文件的存储路径（服务器文件系统上的绝对文件路径）
//    String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/");
    String uploadFilePath = "D:\\upload";
    FileItemFactory factory = new DiskFileItemFactory();
    //创建 ServletFileUpload 对象
    ServletFileUpload upload = new ServletFileUpload(factory);
    //解决上传"文件名"的中文乱码
    // ServletFileUpload - setHeaderEncoding方法设置转换时所使用的字符集编码
    upload.setHeaderEncoding("UTF-8");
    try {
        //解析form表单中的每个字符的数据，返回一个FileItem对象集合（List)
        request.getParameter("123");
        List<FileItem> items = upload.parseRequest(request);
        for (FileItem item : items) {
            //判断FileItem对象封装的数据类型（普通表单字段返回true，文件表单字段返回false）
            if (item.isFormField()) {
                //返回表单字段元素的name属性的值
                fieldName = item.getFieldName();
                System.out.println("name属性值为："+fieldName);
            } else {  //文件类型
                //FileItem - getName方法，获得文件上传字段中的文件名（普通表单字段返回null）
                String fileName = item.getName();
                System.out.println("getName获得的文件名:"+fileName);
                //判断文件名是否为null 是否是正常文件
                if (fileName != null && !fileName.equals("")) {
                    //创建File对象 设置文件路径 + 文件名
                    File saveFile = new File(uploadFilePath, uploadFileName);
                    out.print("上传成功后的文件名是：" + uploadFileName);
                    out.print("上传成功后的路径是：" + uploadFilePath);
                    //FileItem write方法 根据File对象设置的文件名和路径 保存的主体内容保存到指定的文件中
                    item.write(saveFile);
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
%>
</body>
</html>